//
//  CZOAuthViewController.swift
//  WH01
//
//  Created by Apple on 16/7/8.
//  Copyright © 2016年 KY. All rights reserved.
//

import UIKit
import SVProgressHUD
import AFNetworking

//  微博AppKey
let WeiBoAppKey = "3102093126"
//  微博回调页
let WeiBoredirect_Uri = "http://www.itcast.cn"
//  AppSecret
let WeiBoAppSecret = "d94d938e03cc1321c463f2e406dd8cf3"
//

class CZOAuthViewController: UIViewController {
    
    // MARK:    --懒加载
    private lazy var webView: UIWebView = UIWebView()
    
    override func loadView() {
        webView.delegate = self
        //  自定义view
        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        //  添加导航栏按钮
        setupNavUI()
        //  设置title
        navigationItem.title = "微博登录"
        requestOAuth()
    }
    
    private func setupNavUI() {
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "取消", target: self, action: "cancelAction")
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", target: self, action: "autoFillAction")
    }
    
    // MARK:    -点击事件
    @objc private func cancelAction() {
        dismissViewControllerAnimated(true, completion: nil)
        
    }
    
    @objc private func autoFillAction() {
    
        webView.stringByEvaluatingJavaScriptFromString("document.getElementById('userId').value = 'hao123guohaibin@163.com';document.getElementById('passwd').value = 'guohaibin012'")
        
    }
    
    
    
    //  新浪微博登录
    private func requestOAuth() {
        //  创建url
        let url = "https://api.weibo.com/oauth2/authorize?client_id=\(WeiBoAppKey)&redirect_uri=\(WeiBoredirect_Uri)"
        
        //  打印url，查看用户名和密码文本框
        print(url)
        
        //  创建urlrequest
        let urlRequest = NSURLRequest(URL: NSURL(string: url)!)
        
        //  加载web页面
        webView.loadRequest(urlRequest)
        
        
    }
    
    //  根据code获取accesstoken
    private func requestAccessToken(code: String) {
        
        CZNetworkTools.sharedTools.requestAccessToken(code) { (response, error) -> () in
            if error != nil {
                print(error)
                return
            }

            guard let dic = response as? [String: AnyObject] else {
                print("不是一个正确的字典格式")
                return
            }

            //  代码执行到此，字典格式正确,完成字典转模型
            let userAccount = CZUserAccount(dic: dic)

            
            //  获取用户信息
            self.requestUserInfo(userAccount)
        }
        
        
        
        
//        //  url接口地址
//        let url = "https://api.weibo.com/oauth2/access_token"
//        //  准备参数
//        let params = [
//            "client_id": WeiBoAppKey,
//            "client_secret": WeiBoAppSecret,
//            "grant_type": "authorization_code",
//            "code": code,
//            "redirect_uri": WeiBoredirect_Uri
//        ]
//        //  通用的网络请求
//        CZNetworkTools.sharedTools.request(.POST, url: url, params: params) { (response, error) -> () in
//            if error != nil {
//                print(error)
//                return
//            }
//            
//            guard let dic = response as? [String: AnyObject] else {
//                print("不是一个正确的字典格式")
//                return
//            }
//
//            //  代码执行到此，字典格式正确,完成字典转模型
//            let userAccount = CZUserAccount(dic: dic)
//
//            
//            //  获取用户信息
//            self.requestUserInfo(userAccount)
//            
//        }
        
        
//        let sessionManager = AFHTTPSessionManager()
//        //  添加响应数据可接受的类型
//        sessionManager.responseSerializer.acceptableContentTypes?.insert("text/plain")
//        //  发送post请求
//        sessionManager.POST(url, parameters: params, progress: nil, success: { (_, response) -> Void in
//            
//            guard let dic = response as? [String: AnyObject] else {
//                print("不是一个正确的字典格式")
//                return
//            }
//            
//            //  代码执行到此，字典格式正确,完成字典转模型
//            let userAccount = CZUserAccount(dic: dic)
//
//            
//            //  获取用户信息
//            self.requestUserInfo(userAccount)
//            
//            
//            
//            }) { (_, error) -> Void in
//            print(error)
//        }
        
    
    }
    
    //  获取用户信息
    private func requestUserInfo(userAccount: CZUserAccount) {
        
        
        CZNetworkTools.sharedTools.requestUserInfo(userAccount) { (response, error) -> () in
            if error != nil {
                print(error)
                return
            }
            guard let dic = response as? [String: AnyObject] else {
                print("不是一个正确的字典格式")
                return
            }
            //  代码执行到此，字典格式正确，获取值
            userAccount.name = dic["name"] as? String
            //  头像
            userAccount.avatar_large = dic["avatar_large"] as? String

            print(userAccount)
        }
        
        
        //  接口地址
//        let url = "https://api.weibo.com/2/users/show.json"
//        let params = [
//            "access_token": userAccount.access_token!,
//            "uid": "\(userAccount.uid)"
//        ]
//        let sessionManager = AFHTTPSessionManager()
//        //  添加响应数据可接受的类型
//        sessionManager.responseSerializer.acceptableContentTypes?.insert("text/plain")
//        sessionManager.GET(url, parameters: params, progress: nil, success: { (_, response) -> Void in
//
//            guard let dic = response as? [String: AnyObject] else {
//                print("不是一个正确的字典格式")
//                return
//            }
//            //  代码执行到此，字典格式正确，获取值
//            userAccount.name = dic["name"] as? String
//            //  头像
//            userAccount.avatar_large = dic["avatar_large"] as? String
//
//            print(userAccount)
//            }) { (_, error) -> Void in
//                print(error)
//        }
        
    }

    

}


extension CZOAuthViewController: UIWebViewDelegate {

    //  已经开始加请求
    func webViewDidStartLoad(webView: UIWebView) {
        SVProgressHUD.show()
    }
    //  请求加载完成
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
    }
    //  请求加载失败
    func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
        SVProgressHUD.dismiss()
    }
    //  将要加载请求
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        //  关心的是我们想要的请求也就是成功回调页开头的请求
        
        guard let url = request.URL else {
            return false
        }
        
        //  代码执行到此url不为nil, 判断url是否是以我们的回调也开头
        if !url.absoluteString.hasPrefix(WeiBoredirect_Uri) {
            //  '!'表情不是以我们的回调也开头让其加载页面
            return true
            
        }
        
        //  代码执行到此， 是我们的回调也大头，是我们关心的请求
        
        if let query = url.query where query.hasPrefix("code=") {
            //  截取code对应的值
            let code = query.substringFromIndex("code=".endIndex)
            
            //  根据code获取accesstoken
            requestAccessToken(code)
        }
        
        return false
        
        
    }
    
    
    
    
    
}



